home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / WLSource / vol.s < prev    next >
Text File  |  1997-04-10  |  2KB  |  150 lines

  1. *    vol.s    Vertical OverLap
  2. *        垂直方向のオーバーラップ / 最高速 = 3
  3. *            by Mitsuky
  4.  
  5.  
  6. SPEED_MAX    equ    3
  7.  
  8.     .offset    8        * 引き数
  9. _source_ptr:    .ds.l    1
  10. _dest_ptr:    .ds.l    1
  11. _speed:        .ds.l    1
  12. _vdisp:        .ds.l    1
  13.  
  14.  
  15.  
  16. TR32    .macro    num
  17.     movem.l    (a1)+,d0-d5/a0/a5
  18.     movem.l    d0-d5/a0/a5,num(a2)
  19.     movem.l    (a3)+,d0-d5/a0/a5
  20.     movem.l    d0-d5/a0/a5,num(a4)
  21.     .endm
  22.  
  23.  
  24.  
  25.     .text
  26.     .even
  27.  
  28.     .dc.b    'WL10',$0d,$0a
  29.     .dc.b    '垂直方向のオーバーラップ / 最高速 = 3',$0d,$0a
  30.     .dc.b    '    by Mitsuky',$0d,$0a
  31.     .dc.b    $1a
  32.     .even
  33.  
  34. vol:
  35.     link    a6,#0
  36.     movem.l    d1-d7/a0-a5,-(sp)
  37.  
  38.     move.l    _speed(a6),d0    * d0.w =
  39.     bmi    main_ask
  40.     cmpi.l    #SPEED_MAX,d0
  41.     bhi    main_err
  42.  
  43.     tst.l    _vdisp(a6)
  44.     bmi    main_ask_vdisp
  45.  
  46.  
  47.  
  48.     movea.l    _source_ptr(a6),a1    * a1.l = 転送元アドレス・その1
  49.     movea.l    _dest_ptr(a6),a2    * a2.l = 転送先アドレス・その1
  50.     movea.l    a1,a3
  51.     movea.l    a2,a4
  52.     adda.l    #1024*511,a3        * a3.l = 転送元アドレス・その2
  53.     adda.l    #1024*511,a4        * a4.l = 転送先アドレス・その2
  54.  
  55.     move.w    #512/2,d7
  56.     lsr.w    d0,d7
  57.     subq.w    #1,d7            * d7.w = ループ回数
  58.  
  59.     moveq.l    #1,d5
  60.     lsl.w    d0,d5
  61.     subq.w    #1,d5            * d5.w = 1度に描くラスター数
  62. loop:
  63.     bsr    vdisp
  64.  
  65.     move.w    d5,d6
  66.     move.w    d5,-(sp)
  67. loop_2:
  68.     TR32    0
  69.     TR32    32*1
  70.     TR32    32*2
  71.     TR32    32*3
  72.     TR32    32*4
  73.     TR32    32*5
  74.     TR32    32*6
  75.     TR32    32*7
  76.     TR32    32*8
  77.     TR32    32*9
  78.     TR32    32*10
  79.     TR32    32*11
  80.     TR32    32*12
  81.     TR32    32*13
  82.     TR32    32*14
  83.     TR32    32*15
  84.     TR32    32*16
  85.     TR32    32*17
  86.     TR32    32*18
  87.     TR32    32*19
  88.     TR32    32*20
  89.     TR32    32*21
  90.     TR32    32*22
  91.     TR32    32*23
  92.     TR32    32*24
  93.     TR32    32*25
  94.     TR32    32*26
  95.     TR32    32*27
  96.     TR32    32*28
  97.     TR32    32*29
  98.     TR32    32*30
  99.     TR32    32*31
  100.  
  101.     lea.l    1024(a1),a1
  102.     lea.l    1024*2(a2),a2
  103.     lea.l    -1024*3(a3),a3
  104.     lea.l    -1024*2(a4),a4
  105.     dbra    d6,loop_2
  106.     move.w    (sp)+,d5
  107.     dbra    d7,loop
  108.  
  109.  
  110. main_rts:
  111.     moveq.l    #0,d0
  112. main_rts_2:
  113.     movem.l    (sp)+,d1-d7/a0-a5
  114.     unlk    a6
  115.     rts
  116.  
  117.  
  118. ****    ****
  119. main_err:
  120.     moveq.l    #-1,d0
  121.     bra    main_rts_2
  122.  
  123.  
  124. ****    ****
  125. main_ask:
  126.     moveq.l    #SPEED_MAX,d0
  127.     bra    main_rts_2
  128.  
  129.  
  130. ****    ****
  131. main_ask_vdisp:
  132.     move.l    _speed(a6),d0
  133.     lea.l    ask_vdisp_table(pc),a0
  134.     add.w    d0,d0
  135.     move.w    (a0,d0.w),d0
  136.     bra    main_rts_2
  137.  
  138. ask_vdisp_table:
  139.     .dc.w    512,512/2,512/4,512/8
  140.  
  141.  
  142. *********************************************************
  143. vdisp:
  144.     movem.l    a0,-(sp)
  145.     move.l    _vdisp(a6),a0
  146.     jsr    (a0)
  147.     movem.l    (sp)+,a0
  148.     rts
  149.  
  150.